While you can use either forEach(list::add)
or collect
with a Stream
, collect
is by far the
better choice because it’s automatically thread-safe and parallellizable.
Noncompliant code example
List<String> bookNames = new ArrayList<>();
books.stream().filter(book -> book.getIsbn().startsWith("0"))
.map(Book::getTitle)
.forEach(bookNames::add); // Noncompliant
Compliant solution
List<String> bookNames = books.stream().filter(book -> book.getIsbn().startsWith("0"))
.map(Book::getTitle)
.collect(Collectors.toList());